improve SQL queries for predicates on main-table columns#556
Open
cportele wants to merge 1 commit into
Open
Conversation
A filter predicate on a scalar column of the main feature table was always encoded as a self-semi-join (A.id IN (SELECT A.id FROM <main> WHERE ...)). That subquery scans the whole table and the planner does not flatten it, so its cost grew with the table size rather than with the number of selected features. Such predicates are now emitted as a direct conjunct on the main alias. The semi-join form is kept whenever evaluating the predicate requires a join, junction, or array traversal, where it is load-bearing for cardinality. This also fixes a latent bug in the temporal interval (OVERLAPS) encoding, which hardcoded a trailing parenthesis to close the self-semi-join subquery; it now preserves the operand expression's suffix so both the inline and the subquery forms stay balanced. A negated inline predicate is wrapped as NOT (...). Updates the golden SQL specs and query fixtures accordingly.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A filter predicate on a scalar column of the main feature table was always encoded as a self-semi-join
(A.id IN (SELECT A.id FROM <main> WHERE ...)). That subquery scans the whole table and the planner does not flatten it, so its cost grew with the table size rather than with the number of selected features. Such predicates are now emitted as a direct conjunct on the main alias. The semi-join form is kept whenever evaluating the predicate requires a join, junction, or array traversal, where it is load-bearing for cardinality.This also fixes a latent bug in the temporal interval (OVERLAPS) encoding, which hardcoded a trailing parenthesis to close the self-semi-join subquery; it now preserves the operand expression's suffix so both the inline and the subquery forms stay balanced. A negated inline predicate is wrapped as NOT (...).
Updates the golden SQL specs and query fixtures accordingly.